//
// Description: 861. 二分图的最大匹配
// Created by Loading on 2022/5/22.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 510, M = 1e5 + 10;

// 邻接表
int h[N], e[M], ne[M], idx;
// 表示右半部匹配到的左半部的点的编号，0 表示未匹配
int match[N];
// 表示右半部中的点是否已经遍历过
bool st[N];

// 增加一条边
void add(int a, int b) {
    e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

/* 匈牙利算法 */
// 返回能否找到与 x 匹配的点
bool Hungarian(int x) {
    for (int i = h[x]; i != -1; i = ne[i]) {
        int j = e[i];
        if (!st[j]) {
            st[j] = true;
            // 右半部点未匹配或已匹配到的左半部的点可以重新找一个点匹配，则当前点匹配成功
            if (!match[j] || Hungarian(match[j])) {
                /* 注意：不要写成 match[x] = j */
                match[j] = x;
                return true;
            }
        }
    }

    // 所有点均匹配失败
    return false;
}

int main() {
    memset(h, -1, sizeof h);

    int n1, n2, m;
    cin >> n1 >> n2 >> m;
    for (int i = 0; i < m; ++i) {
        int u, v;
        cin >> u >> v;
        // 二分图为有向图，且不需要遍历右半部图
        add(u, v);
    }

    int res = 0;
    for (int i = 1; i <= n1; ++i) {
        // 每次寻找，都要重置st数组
        memset(st, false, sizeof st);
        if (Hungarian(i)) {
            ++res;
        }
    }

    cout << res << endl;

    return 0;
}